<?php

/**
 *  构建分页类
 * 三个重要的参数
 * $page 当前页
 * $limit 每页条数
 * $total 总条数
 *
 * 步骤
 * 1， 获取地址栏上的参数去掉地址栏上的 page 参数
 * 2，循环拼接 分页的html 代码，便于在前端展示分页栏，注意a标签里的地址是当前去掉page参数的地址，加上我们循环生成的page值。
 */
 defined('ACC') || exit('Acc define');

  class PageTool{

      protected $page = 1;
      protected $limit = 10;
      protected $total = 0;

      public function __construct($total,$limit=false,$page=false){
          $this->total = $total;
          $this->limit = $limit?$limit:$this->limit;
          $this->page = $page?$page:$this->page;
      }

      public function show(){
          //获取当前地址栏上的地址
          $uri = $_SERVER['REQUEST_URI'];  // echo '<hr />';
          $parse = parse_url($uri);  //将地址栏上的信息解析成数组
          $url = $parse['path'];

          $param = [];
          if(isset($parse['query'])){
              parse_str($parse['query'],$param);  //将参数解析成数组变量 传到$param 变量中
              unset($param['page']);  //去地址栏参数中的 page 参数值
          }

           //判断如果地址栏上除了page就没有别的参数 后续拼接参数就不需要加 & 符号，如果有就要加 & 符号
          if(!empty($param)){
              $url = $url . '?' . http_build_query($param) . '&';
          }else{
              $url = $url . '?';
          }

          //第二步，拼接html 分页代码
          $page = $this->page;
          $pageAll = ceil($this->total/$this->limit);   //总页数
          $nav[0] = '<span class="page_now">' . $page . '</span>>';

//          echo $page;   echo '<hr />';
          $lin = 4;  //设置分页栏显示几页
          if($pageAll <= 4){
              $lin = $pageAll;
          }

          // ⚠️ 注意这里有个坑，会造成死循环  ️
          for($left=$page-1,$right=$page+1;($left>=1 && $right <= $lin) || count($nav) < $lin;){
              if($left >= 1){
                  array_unshift($nav,'<a href="' . $url  . 'page='. $left .'" >['.$left.']</a>');
                  $left = $left - 1;
              }

              if($right <= $pageAll){
                  array_push($nav,'<a href="'. $url .'page=' .$right . '">['.$right.']</a>');
                  $right += 1;
              }
          }

          return implode('',$nav);
      }

  }

//  $page = new PageTool(20,2,1);
//  print_r($page->show());
